Most computer operating systems today are multi-process systems in which several processes are running simultaneously. A process is a running program that owns its own memory, file handles, and other system resources. An individual process can contain separate execution paths, called threads. For the most part, all of a process's code and data space is available to all of the threads in the process. Threads are managed by the operating system, and each thread has its own stack. A main thread or primary thread (e.g. such as an application program) communicates with subsidiary threads in many different ways, such as by setting a global variable.
Computer operating systems such as Microsoft Windows CE, do not provide a sufficient mechanism whereby variable amounts of data can be easily transported between different processes. Microsoft Windows CE employs a set method of copying data from process to process. The main or primary thread handles all of the communication from the windows processing signals and communication from the other processes. In some situations, multiple processes desire to receive data from subsidiary threads. Furthermore, subsidiary threads in one process may desire to receive data from a subsidiary thread in another process. This type of operating system does not allow for thread to thread communication. In fact, Microsoft Windows CE and other similar operating systems allow limited pointer passing between processes, and can not support direct passing of variable amounts of data between processes and between threads.
Another drawback of a system such as Microsoft Windows CE, is that it does not allow for communication between local and remote processes, such as a process running on a different machine. The system also does not allow for communicating data from one process to another process in various types of formats and protocols.